package com.itany.corejava.code01_Java基础;

/**
 * @author: 石小俊
 * @date: 2023年02月28日 15:38
 * @version: 1.0
 */
public class Test05_强制类型转换 {
    public static void main(String[] args) {
        // 当值的大小在目标类型范围时,不会有任何损失
        long l = 1000L;
        int i = (int) l;
        System.out.println(i);

        // 精度损失场景一:当值的范围超出了目标范围时
        byte b = (byte) l;
        // 此时的值不是1000,而是-24
        // 通过二进制补码运算得到的,后面讲
        System.out.println(b);

        // 精度损失场景二:小数转换成整数,但整数在目标类型范围中
        // 会自动截取掉小数部分,整数部分是不变
        double d = 123.45;
        int i2 = (int) d;
        System.out.println(i2);

        // 精度损失场景三:小数转换成整数,且整数不在目标类型范围中
        // 会自动截取小数部分,且整数也发生变化
        // 通过二进制运算得到的
        double d2 = 1234.56;
        byte b2 = (byte) d2;
        System.out.println(b2);
    }
}
